/**
 * 问4E12以内的恰好有9个约数的数的数量
 * 只要两种形式的数有9个因子：
 * 1. p^8
 * 2. a^2 * b ^ 2
 * 其中a、b、p都是质数。
 * 首先筛出2E6的质数记作P，再首先暴力输出形式1的数量。
 * 考虑形式2，找到sqrt(N)在P中的位置，从大到小for每个b:
 *    用二分法找出满足 (ab)^2 > N 的最小的a的位置，将其加入到ans即可
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using Real = long double;
using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;
using i128 = __int128_t;


struct Sieve{ // 线性筛法

using llt = long long;
vector<bool> isComp; // isComp[i]表示i是否为合数
vector<llt> primes; // primes[i]是第i个质数

Sieve(int SZ = 2035000){
    primes.reserve(SZ);
    isComp.assign(SZ, false);    



    long long tmp;
    for(int i=2;i<SZ;++i){
        if(!isComp[i]){
            primes.push_back(i);

        }

        for(int j=0,n=primes.size();j<n&&(tmp=i*(long long)primes[j])<SZ;++j){
            isComp[tmp] = true;

            if(0 == i % primes[j]){

                break;
            }else{

            }
        }
    }
}

}S;

llt f8(llt x){
    x *= x;
    x *= x;
    return x *= x;
}

int bsFirst1(int start, int end, function<int(int)> f){
    assert(start <= end);
	int left = start, right = end, mid;
	do{
        mid = (left + right) >> 1;
		auto tmp = f(mid);
		assert(0 == tmp or 1 == tmp);
		if(tmp == 1) right = mid - 1;
		else left = mid + 1; 
	}while(left <= right);
	return left;
}

llt N;

void work(){
    cin >> N;
    if(N <= 35) {
        return (void)(cout << 0 << endl);
    }
    int ans = 0;
    const auto & primes = S.primes;
    for(auto p : primes){
        if(p > 100) break;
        auto tmp = f8(p);
        if(tmp > N) break;
        ans += 1;
    }

    llt limit = sqrt(N);
    while(limit * limit <= N) ++limit;
    auto it = lower_bound(primes.begin(), primes.end(), limit);
    assert(it != primes.end());
    assert(*it * *it > N);
    if(it != primes.begin()) {
        assert(*(it - 1) * *(it - 1) <= N);
        for(;it!=primes.begin();--it){
            auto b = *(it - 1);
            int end = it - 1 - primes.begin();
            if(end){
                auto t = bsFirst1(0, end - 1, [b, &primes](int pos)->int{
                    auto a = primes[pos];
                    i128 x = b;
                    if(x > N) return 1;
                    x *= b;
                    if(x > N) return 1;
                    x *= a;
                    if(x > N) return 1;
                    x *= a;
                    if(x > N) return 1;
                    return 0;
                });
                ans += t;
                // printf("b = %lld, t = %d\n", b, t);            
            }

        }
    }

    cout << ans << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	

    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}